package com.weichen.studentgameexchange.game.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.weichen.studentgameexchange.common.common.Result;
import com.weichen.studentgameexchange.game.entity.Genre;
import com.weichen.studentgameexchange.game.entity.Sort;
import com.weichen.studentgameexchange.game.entity.vo.SortVo;
import com.weichen.studentgameexchange.game.service.ISortService;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 惟尘
 * @since 2025-02-01
 */
@RestController
@RequestMapping("/game/sort")
public class SortController {

    @Autowired
    ISortService sortService;

    /**
     * 查看所有游戏分类
     * @return
     */
    @Operation(summary = "查看所有游戏分类")
    @GetMapping("/user/select")
    public Result userSelect(){
        List<Sort> sorts = sortService.list();
        return Result.success(sorts);
    }

    /**
     * 根据sortId条件分页查看游戏分类
     * @param sortId
     * @param page
     * @param size
     * @return
     */
    @Operation(summary = "根据sortId条件分页查看游戏分类")
    @GetMapping("/user/page/{sortId}")
    public Result userPage(@PathVariable("sortId") Long  sortId,
                           @RequestParam(value = "page",defaultValue = "1") Integer page,
                           @RequestParam(value = "size",defaultValue = "5") Integer size){
        return sortService.userPage(sortId,page,size);
    }

/**
 * TODO 管理员-游戏--游戏分类管理
 */
    /**
     * 管理员添加分类
     * @param sort
     * @return
     */
    @Operation(summary = "管理员添加分类接口")
    @PostMapping("/admin/add")
    public Result adminAdd(@RequestBody Sort sort){
        return sortService.adminAdd(sort);
    }

    /**
     * 管理员分页查询分类信息
     * @param keyword
     * @param page
     * @param size
     * @return
     */
    @Operation(summary = "管理员分页查询分类信息接口")
    @GetMapping("/admin/page")
    public Result adminPage(@RequestParam("keyword") String keyword,
                            @RequestParam(value = "page",defaultValue = "1") Integer page,
                            @RequestParam(value = "size",defaultValue = "5") Integer size){
        Page<Sort> sortPage = sortService.adminPage(keyword, page, size);
        return Result.success(sortPage);
    }

    /**
     * 管理员查看单个分类信息
     * @param sortId
     * @return
     */
    @Operation(summary = "管理员查看单个分类信息接口")
    @GetMapping("/admin/selectOne/{sortId}")
    public Result adminSelectOne(@PathVariable("sortId") Long sortId){
        Sort sort = sortService.getById(sortId);
        return Result.success(sort);
    }

    /**
     * 管理员修改分类信息
     * @param sort
     * @return
     */
    @Operation(summary = "管理员修改分类信息接口")
    @PutMapping("/admin/update")
    public Result adminUpdate(@RequestBody Sort sort){
        return sortService.adminUpdate(sort);
    }

    /**
     * 管理员删除单个分类
     * @param sortId
     * @return
     */
    @Operation(summary = "管理员删除单个分类接口")
    @DeleteMapping("/admin/delete/{sortId}")
    public Result adminDeleteOne(@PathVariable("sortId") Long sortId){
        sortService.adminDeleteOne(sortId);
        return Result.success();
    }

    /**
     * 管理员批量删除多个分类
     * @param sortIds
     * @return
     */
    @Operation(summary = "管理员批量删除多个分类接口")
    @DeleteMapping("/admin/delete/batch")
    public Result adminDeleteBatch(@RequestBody List<Long> sortIds){
        for (Long sortId : sortIds)
            adminDeleteOne(sortId);
        return Result.success();
    }

    /**
     * 管理员添加游戏-分类
     * @param sortVo
     * @return
     */
    @Operation(summary = "管理员添加游戏-分类接口")
    @PostMapping("/admin/addGameSort")
    public Result addGameSort(@RequestBody SortVo sortVo){
        return sortService.addGameSort(sortVo);
    }

    /**
     * 管理员查看游戏-分类信息
     * @param sortId
     * @return
     */
    @Operation(summary = "管理员查看游戏-分类信息接口")
    @GetMapping("/admin/selectGameSort/{sortId}")
    public Result selectGameSort(@PathVariable("sortId") Long sortId){
        return sortService.selectGameSort(sortId);
    }

    /**
     * 管理员修改游戏-分类信息：分类名不动，只改游戏
     * @param sortVo
     * @return
     */
    @Operation(summary = "管理员修改游戏-分类信息接口")
    @PutMapping("/admin/updateGameSort")
    public Result updateGameSort(@RequestBody SortVo sortVo){
        return sortService.updateGameSort(sortVo);
    }

}
